spring 接口有两个实现类的情况下@Autowired 如何区分使用哪个 您所在的位置:网站首页 spring 一个接口多个实现类怎么注入 spring 接口有两个实现类的情况下@Autowired 如何区分使用哪个

spring 接口有两个实现类的情况下@Autowired 如何区分使用哪个

2023-11-11 01:17| 来源: 网络整理| 查看: 265

接口:

public interface UserService { void add(); }

实现类:

@Component public class UserServiceFestival implements UserService { @Override public void add() { System.out.println("注册用户发送优惠券..."); } } @Component public class UserServiceNormal implements UserService { public void add() { System.out.println("添加用户..."); } }

解决方法: UserService -> UserServiceNormal

@Autowired private UserServiceNormal userService;

或者:Primary确定哪个实现类为首选

@Component @Primary public class UserServiceFestival implements UserService { @Override public void add() { System.out.println("注册用户发送优惠券..."); } }

或者:限定符

@Component @Qualifier("festival") public class UserServiceFestival implements UserService { @Override public void add() { System.out.println("注册用户发送优惠券..."); } } @Component @Qualifier("normal") public class UserServiceNormal implements UserService { public void add() { System.out.println("添加用户..."); } }

或者:推荐使用首选方案

@Component("festival") public class UserServiceFestival implements UserService { @Override public void add() { System.out.println("注册用户发送优惠券..."); } } @Component("normal") public class UserServiceNormal implements UserService { public void add() { System.out.println("添加用户..."); } }

测试类需要这么写:

@Autowired @Qualifier("normal") // 对应的 private UserService userService;

或者 @Resource(name=“normal”) = @Autowired + @Qualifier(“normal”)

@Resource(name="normal") private UserService userService;

另外:Component 注解 默认id 是 首字母小写的类名。(userServiceNormal 或者 userServiceFestival )



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有